Java Technologies Observer Design Pattern Example: Event Handling এর জন্য Observer Pattern ব্যবহার গাইড ও নোট

399

Observer Design Pattern হল একটি আচরণগত ডিজাইন প্যাটার্ন যা একাধিক অবজার্ভার (subscriber) কে একটি বিষয় (subject) এর পরিবর্তন সম্পর্কে অবহিত করতে ব্যবহৃত হয়। এটি ইভেন্ট হ্যান্ডলিং বা ডাটা আপডেটের ক্ষেত্রে খুবই কার্যকর, বিশেষত যখন একাধিক অবজার্ভার থাকে যারা একত্রে একটি বিষয় (subject) এর অবস্থা পরিবর্তনের উপর নজর রাখে।

নিচে Observer Pattern ব্যবহার করে ইভেন্ট হ্যান্ডলিংয়ের একটি উদাহরণ দেওয়া হয়েছে যেখানে একটি Subject ক্লাস তার অবজার্ভারদের খবর দেয় যখন তার স্টেট পরিবর্তন হয়।

উদাহরণ:

import java.util.ArrayList;
import java.util.List;

// Observer Interface
interface Observer {
    void update(String message);
}

// Concrete Observer - এটি Observer Interface ইমপ্লিমেন্ট করে
class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}

// Subject (Publisher) Interface
interface Subject {
    void addObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// Concrete Subject - এটি Subject Interface ইমপ্লিমেন্ট করে
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String state;

    public void setState(String state) {
        this.state = state;
        notifyObservers();
    }

    public String getState() {
        return state;
    }

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }
}

// Main Class to demonstrate Observer Pattern
public class ObserverPatternExample {
    public static void main(String[] args) {
        // ConcreteSubject তৈরি
        ConcreteSubject subject = new ConcreteSubject();

        // ConcreteObservers তৈরি
        Observer observer1 = new ConcreteObserver("Observer 1");
        Observer observer2 = new ConcreteObserver("Observer 2");
        Observer observer3 = new ConcreteObserver("Observer 3");

        // Observer গুলো সাবস্ক্রাইব করে Subject এ
        subject.addObserver(observer1);
        subject.addObserver(observer2);
        subject.addObserver(observer3);

        // Subject এর state পরিবর্তন করলে সকল Observerদের খবর দেওয়া হবে
        System.out.println("State change 1: ");
        subject.setState("New State: 1");

        // Observer 1 কে সরিয়ে দেয়া
        subject.removeObserver(observer1);

        // আবার state change
        System.out.println("\nState change 2: ");
        subject.setState("New State: 2");
    }
}

Explanation:

  1. Observer Interface: এটি একটি সাধারণ ইন্টারফেস যা সমস্ত অবজার্ভার ক্লাস দ্বারা ইমপ্লিমেন্ট করতে হবে। এটি update() মেথডের মাধ্যমে অবজার্ভারদের অবহিত করবে।
  2. ConcreteObserver Class: এই ক্লাসটি Observer ইন্টারফেস ইমপ্লিমেন্ট করে এবং update() মেথডের মাধ্যমে একটি বার্তা গ্রহণ করে তা প্রদর্শন করে।
  3. Subject Interface: এটি একটি ইন্টারফেস যা addObserver(), removeObserver(), এবং notifyObservers() মেথড প্রদান করে। এটি অবজার্ভারদের যুক্ত করার, তাদের সরিয়ে দেওয়ার, এবং তাদের সবকে অবহিত করার কাজ করে।
  4. ConcreteSubject Class: এটি Subject ইন্টারফেস ইমপ্লিমেন্ট করে এবং তার state এর পরিবর্তন ঘটানোর সাথে সাথে অবজার্ভারদের অবহিত করে। setState() মেথডের মাধ্যমে স্টেট পরিবর্তন করা হয় এবং notifyObservers() এর মাধ্যমে সকল অবজার্ভারকে অবহিত করা হয়।
  5. Main Class: ObserverPatternExample ক্লাসে একটি ConcreteSubject এবং তিনটি ConcreteObserver তৈরি করা হয়। আমরা প্রথমে সকল অবজার্ভারকে সাবস্ক্রাইব করে দিয়ে স্টেট পরিবর্তন ঘটাই, পরে একটি অবজার্ভার সরিয়ে দিয়ে আবার স্টেট পরিবর্তন করি।

Output Example:

State change 1: 
Observer 1 received message: New State: 1
Observer 2 received message: New State: 1
Observer 3 received message: New State: 1

State change 2: 
Observer 2 received message: New State: 2
Observer 3 received message: New State: 2

Key Points:

  • Observer Pattern এ, Subject এর স্টেট পরিবর্তন হলে, সকল অবজার্ভারদের অবহিত করা হয়।
  • এই প্যাটার্নটি ইভেন্ট হ্যান্ডলিং এবং ডাটা আপডেটিংয়ে ব্যবহার করা হয় যেখানে একাধিক অবজার্ভার একই বিষয়টির উপর নজর রাখে।
  • আপনি অবজার্ভারগুলোকে addObserver() এবং removeObserver() মেথডের মাধ্যমে সহজেই যুক্ত বা সরিয়ে ফেলতে পারেন।
  • এটি loose coupling (অল্প সম্পর্কিত) ডিজাইন তৈরি করে, যেখানে অবজার্ভার এবং সাবজেক্ট একে অপরের প্রতি খুব নির্ভরশীল নয়।

এটি মূলত GUI অ্যাপ্লিকেশন, ইভেন্ট হ্যান্ডলিং, এবং ডাটা মডেল আপডেটের জন্য ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...